package com.solo.eggsolo.web.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.AsyncHandlerInterceptor;

/**
 * 
 * @author Yu
 *
 */

public class LoginInterceptor implements AsyncHandlerInterceptor {
	private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);

	/**
	 * <pre>
	 *  定义spring拦截器不验证URL
	 *  anon：不验证
	 *  /authc：受控制的
	 * </pre>
	 */
	private static final String NO_INTERCEPTOR_PATH = ".*/((error)|(anon)|(js)|(login)).*";

	/**
	 * 在请求处理之前进行调用（Controller方法调用之前） 基于URL实现的拦截器
	 * 
	 * @param request
	 * @param response
	 * @param handler
	 * @return
	 * @throws Exception
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		String path = request.getServletPath();

		logger.info("访问路径:" + path);

		// 如果路径中包含有指定的关键词则不拦截,这里的拦击规则可以根据需要进行设计编码
		if (path.matches(NO_INTERCEPTOR_PATH)) {

			logger.info("不需要的拦截!");
			return true;
		} else {
			// 这写你拦截需要干的事儿，比如取缓存，SESSION，权限判断等
			Object user = request.getSession().getAttribute("SESSION_USER");
			if (user == null) {
				response.sendRedirect(request.getContextPath() + "/login.html");
				logger.info("没有登录返回登陆页面");
				return false;
			}

			logger.info("登陆失败返回登陆页面");
			return true;
		}
	}
	
	
}
